package com.aiwiown.snackmq.common.auth;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

/**
 * 【已优化】权限定义类。
 * 新增了 resourceType 字段，以支持对不同类型资源（如 Topic, ConsumerGroup）的权限控制。
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Permission implements Serializable {

    private static final long serialVersionUID = -7488649264019875183L;
    /**
     * 【新增】资源类型，例如 "TOPIC", "CONSUMER_GROUP", "CLUSTER"。
     */
    private String resourceType;

    /**
     * 资源名称，例如 "order-topic" 或 "*" 代表所有。
     */
    private String resourceName;

    /**
     * 允许的操作。
     */
    private Action action;

    /**
     * 【新增】为了向后兼容和方便使用而创建的构造函数。
     *
     * @param resourceName 资源名称
     * @param action       操作
     */
    public Permission(String resourceName, Action action) {
        // 如果是管理操作，我们假定它作用于集群资源
        if (action == Action.MANAGE) {
            this.resourceType = "CLUSTER";
        } else {
            // 默认资源类型为 TOPIC，以兼容旧代码
            this.resourceType = "TOPIC";
        }
        this.resourceName = resourceName;
        this.action = action;
    }
}